import openpyxl
import json
import os


# 给数据一列设置单元格样式,这个是设置3色渐变
def set_condition_format3():
    import openpyxl
    from openpyxl.formatting.rule import ColorScaleRule

    # file_name = "C:/Users/Dell/Documents/PythonFiles/forTESTonly/2sel/base/new_xlsx/changeDB318.xlsx"
    # file_name = "C:/Users/Dell/Documents/PythonFiles/forTESTonly/2sel/base/new_xlsx/result.xlsx"
    file_name = "./result.xlsx"
    wb = openpyxl.load_workbook(file_name)

    for ws in wb:
        rowN = ws.max_row

        for c in range(20):     # 一共有21列，其中，第一列不比较
            BT = chr(ord("B") + c)
            temp_range = f'{BT}2:{BT}{rowN}'
            if "small" in ws[f"{BT}1"].value:   # 判断列名，若是越小越好
                big, small = '27a500' ,'ff564e'       # 小的是绿色
                mid_value = 10
            else:
                big, small = 'ff564e' , '27a500'    # 大的是绿色
                mid_value = 90
            ws.conditional_formatting.add(temp_range,
                                          ColorScaleRule(start_type='max', start_color=big,
                                                         mid_type='percentile', mid_value=mid_value,  mid_color = 'FFFFFF',
                                                         end_type='min', end_color=small
                                                         )
                                        )
    wb.save(file_name)



# 运行此模块，会将每张图片每个指标的最优模型选出，如果我的模型是第一，那就标为1；
# 模型的结果是一个excel，其中各表单是模型名
# 还会生成若干图片，是以像素为点，表示是否是第一。
if __name__ == "__main__":
    # 因为不能对公式上色
    # 这儿需要先手动将cmp页值传递至result.xlsx之后,再调用下面这个函数
    # 这儿应该改一下：按照排名，而不是比例上色
    set_condition_format3()

    print("ok")
